根据rxjs官网的说法,Observable是冷数据流,Subject是热数据流。
我的理解,从数据生成角度
- Observable: 数据生成者,数据产生在内部
- Subject:数据生成者和消费者,可以从外部接收数据
举个例子
1 2 3 4 5 6 7 8 9
| import { Observable, Subject } from 'rxjs'
const observe$ = Observable.of(1, 2) observe$.subscribe((a) => { console.log(a) })
const subject = new Subject() subject.subscribe((a) => { console.log(a) }) subject.next(1) subject.next(2)
|
从数据实时性角度
- Observable:所有订阅,都可以获取到完全(任意时间,包含订阅前产生的)的数据流(冷)。
- Subject:只能获取到订阅后产生的数据流,即实时数据(热)。
举个例子(还是上面那个,改),能说明问题
1 2 3 4 5 6 7 8 9 10 11
| import { Observable, Subject } from 'rxjs'
const observe$ = Observable.of(1, 2) setTimeout(() => { observe$.subscribe((a) => { console.log(a) }) }, 1000)
const subject = new Subject() subject.next(1) subject.next(2) subject.subscribe((a) => { console.log(a) })
|
这两者合理的组合用法
1 2 3 4 5 6 7
|
const tick$ = Observable.interval(1000); const subject = new Subject(); subject.subscribe(observer1); subject.subscribe(observer2); tick$.subscribe(subject);
|
完